草庐IT

GCD ③ dispatch_barrier

全部标签

ios - 如何延迟由 dispatch_after 排队的 block 的执行?

这个问题在这里已经有了答案:Preventdispatch_after()backgroundtaskfrombeingexecuted(11个答案)关闭8年前。假设我想稍后执行一段代码,所以我这样调用dispatch_after:doubledelayInSeconds=2.0;dispatch_time_tpopTime=dispatch_time(DISPATCH_TIME_NOW,delayInSeconds*NSEC_PER_SEC);dispatch_after(popTime,dispatch_get_main_queue(),^(void){/*code*/});但是如

ios - 在主线程上分派(dispatch) NSNotification 或在主线程上传递通知哪个更好

我知道可能没有正确答案,但我很好奇人们对这个问题的看法,或者以下方法是否有利弊。第一个示例在主线程上分派(dispatch)通知,第二个示例在主线程中处理通知。如果您要从这两种方法中选择一种,选择哪一种,为什么?dispatch_async(dispatch_get_main_queue(),^{[[NSNotificationCenterdefaultCenter]postNotificationName:@"notificationName"object:nil];});-(void)handleNotification:(NSNotification*)notification{

ios - 如何通过创建本地上下文将 GCD 与 Core Data 一起使用

我正在尝试处理项目并将其存储在核心数据和GCD中。我正在将mainContext复制到localContext。我还没有进入合并部分,但它一直让我崩溃。这是我的代码:dispatch_queue_tcoreQueue=dispatch_queue_create("coreQueue",DISPATCH_QUEUE_CONCURRENT);NSMutableSet__block*sumManagedObjects=[NSMutableSetset];intprocessorCount=(int)[[NSProcessInfoprocessInfo]processorCount];int_

ios - 在 iOS 中使用 dispatch_async 时的内存警告

我有下面的代码以30fps的速度捕获jpeg帧并以mp4格式录制视频。我正在尝试将processFrame方法包装在dispatch_async调用中,以便录制过程不会锁定视频播放器。问题是我得到了2级内存警告,应用程序最终在几秒钟后崩溃了。我可以看到dispatch_async方法在尝试将每个帧附加到录制的视频输出中时将队列加载到内存中,并且在30fps时,它没有足够的时间来处理帧并释放已用内存。我尝试使用dispatch_after来延迟processFrame的执行,但它没有帮助。有任何想法吗?我应该采取不同的做法吗?此方法每秒被调用约30次。//Processthedatase

ios - 使用 GCD 实现并发读独占写模型

我正在尝试了解使用GrandCentralDispatch(GCD)来实现控制对资源访问的并发读取独占写入模型的正确方法。假设有一个NSMutableDictionary被大量读取并且偶尔更新。确保读取始终与字典的一致状态一起工作的正确方法是什么?当然,我可以使用队列并序列化对字典的所有读写访问,但这会不必要地序列化应该允许同时访问字典的读取。起初在这里使用组听起来很有希望。我可以创建一个“读取”组并将每个读取操作添加到其中。这将允许读取同时发生。然后当需要进行更新时,我可以将dispatch_notify()或dispatch_wait()作为写入操作的一部分,以确保在允许继续更新之

ios - 升级部署目标时 dispatch_release 编译器错误

我被告知要将iOS应用程序的部署目标从iOS5.1.1升级到iOS6.0。我在代码中有几个dispatch_queue_t变量和相应的dispatch_release函数调用。编译器直到现在才提示我已经提高了部署目标。我读过几篇与此相关的文章(例如DoesARCsupportdispatchqueues?),据说从iOS6.0开始不再需要dispatch_release了,但是...我需要替换这样的吗与另一个函数调用,还是我只是删除它们?谢谢 最佳答案 基本上,您可以简单地删除它们。编译器会自动发出代码以将调度队列和其他GCD对象作

ios - 使用 GCD 在 UITableView 中轻松异步加载图像

在搜索这个答案两天后,我找到了解决方案。使用GCD异步下载图像。使用NSMutableDictionary将图像保存在内存中。我找到了DuncanC在这里解释的解决方案:http://iphonedevsdk.com/forum/iphone-sdk-development/104438-grand-central-dispatch-tableview-images-from-the-web.html如何实现:-(void)viewDidLoad{(...)dispatch_queue_tmainQueue=dispatch_get_global_queue(DISPATCH_QUEU

ios - NSManagedObjectContext 的 performBlock 中的 dispatch_async

根据WWDC2012视频“核心数据最佳实践”,dispatch_sync应该用于在上下文的performBlock中运行某种回调,创建为一种NSPrivateQueueConcurrencyType。这是为什么?我可以使用dispatch_async(dispatch_get_main_queue(),0)...在私有(private)队列上下文的performBlock中调用一些与UI相关的回调吗? 最佳答案 没有。NSPrivateQueueConcurrencyType管理它自己的内部队列,并且不喜欢你试图离开它的线程之一去做

ios - 如何在 iOS7 中停止线程(由 dispatch_queue_create 创建)

我在我的iOS应用程序中创建了这个线程,我想停止它:dispatch_queue_tmyDispatch=dispatch_queue_create("com.myqueue",DISPATCH_QUEUE_CONCURRENT);其中的myDispatch线程分别调用dispatch_global_queue和dispatch_main_queue执行繁重的操作和图形操作。但是为了响应应用程序中的用户操作,可以调用另一个函数,该函数使用另一个与myDispatch非常相似的队列。如果myDispatch线程终止,则没有问题,但此调用也可能在myDispatch线程执行期间发生,因此我

ios - 使用 dispatch_async,使用你自己的单独队列还是你自己的全局队列?

所以当使用dispatch_async...例如,假设您正在建立网络连接...dispatch_queue_totherQ=dispatch_queue_create(NULL,0);__weakMyClass*myself=self;dispatch_async(otherQ,^{myself.searchResultsRA=[myselfdataFrom:happyUrlifError:nil];dispatch_async(dispatch_get_main_queue(),^{if(after)after();});});dispatch_release(otherQ);请注意